package cn.highedu.boot01.controller;

import cn.highedu.boot01.entity.Person;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;

/**
 * 定义一个控制器类
 */
@Controller // 声明这是一个控制器类
public class HelloController {
    /**
     * 处理请求的方法
     */
    /*@RequestMapping("/hello") // 接收客户端的请求 请求路径是 /hello
    public void hello() {
        System.out.println("接收到客户端的请求");
    }*/
    @RequestMapping("/hello")
    @ResponseBody // 给客户端响应 把当前方法的返回值, 当作响应内容, 发给客户端
    public String hello() {
        String now = new Date().toString();
        return "客户端的响应:" + now; // 返回的内容, 就是响应给客户端的内容
    }

    /**
     * 接收请求参数:
     * 1.在方法的参数列表中传入HttpServletRequest参数对象, 通过request对象接收请求参数
     * 2.在方法中通过参数列表的形式接收请求参数
     * 3.在方法的参数列表中传入包含相应参数的对象
     */
    @RequestMapping("/par1")
    @ResponseBody
    public String parameter1(HttpServletRequest request) {
        // 通过request接收请求参数
        String name = request.getParameter("name");
        String age = request.getParameter("age");
        return "接收到客户端的请求参数: name=" + name + ", age=" + age;
    }
    @RequestMapping("/par2")
    @ResponseBody
    public String parameter2(String name, Integer age, String gender) {
        // 通过参数列表的形式传递的参数, 可以自动完成数据类型转换
        // 如果数据类型在转换的过程中出现错误, 会报400(请求语法错误或请求不完整, 服务器不理解)错误
        return "接收到客户端的请求参数: name=" + name + " age=" + age + " gender=" + gender;
    }
    @RequestMapping("/par3")
    @ResponseBody
    public String parameter3(Person person) {
        // 方法中传入了对象, 在请求该方法时, 通过反射检查当前对象中是否包含和参数名相同的属性
        // 如果有就直接调用相应的set方法赋值
        return person.toString();
    }
}
